package com.ct.repository.convert;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;

import java.util.ArrayList;
import java.util.List;

/**
 * pageInfo工具类
 */
public class PageInfoUtil {

    /**
     * pageInfo泛型转换
     *
     * @param pageInfoE pageInfo<E>类对象
     * @param dClass    DTO类的class对象
     * @param <E>       entity类
     * @param <D>       VO类
     */
    public static <E, D> Page<D> pageInfo2VO(Page<E> pageInfoE, Class<D> dClass) {
        return pageInfo2DTO(pageInfoE, dClass);
    }

    /**
     * pageInfo泛型转换
     *
     * @param pageInfoE pageInfo<E>类对象
     * @param dClass    DTO类的class对象
     * @param <E>       entity类
     * @param <D>       DTO类
     */
    public static <E, D> Page<D> pageInfo2DTO(Page<E> pageInfoE, Class<D> dClass) {
        //创建page对象，传入当前页，和每页数量进行初始化（page对象是ArrayList的子类，在ArrayList的基础上添加了分页的信息）
        Page<D> page = new Page<>(pageInfoE.getCurrent(), pageInfoE.getSize());
        //传入总记录数
        page.setTotal(pageInfoE.getTotal());
        page.setPages(pageInfoE.getPages());
        //遍历原entity的列表
        List<D> arrayList = new ArrayList<>();
        for (E e : pageInfoE.getRecords()) {
            try {
                //通过class对象生成DTO的对象
                //使用BeanUtils将entity中与dto相同的属性拷贝到dto中并放入page列表

                D d = CopyUtils.copyProperties(e, dClass);
                arrayList.add(d);
            } catch (Exception ex) {
                ex.printStackTrace();
            }
        }
        page.setRecords(arrayList);
        return page;
    }
}
